<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0329)https://pythontutor.com/iframe-embed.html#code=def%20f%28x%29%3A%0A%20%20%20%20return%20x%20%2B%201%0A%0Adef%20g%28y%29%3A%0A%20%20%20%20return%20y%20-%201%0A%0Adef%20f%28z%29%3A%0A%20%20%20%20return%20x%20*%202&codeDivHeight=400&codeDivWidth=350&cumulative=true&curInstr=0&origin=composingprograms.js&py=3&rawInputLstJSON=%5B%5D -->
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Python Tutor - iframe embed page</title>
  <meta name="robots" content="noindex">

  <!-- let Webpack take care of everything. Use the [hash] feature to
       create unique filenames for releases:
       https://webpack.github.io/docs/long-term-caching.html -->
  <script type="text/javascript" src="./iframe-embed.bundle.js.下载" charset="utf-8"></script><style>/* CSS accompanying ../visualize.html */

h1 {
  font-weight: normal;
  font-size: 20pt;
  font-family: georgia, serif;
  line-height: 1em;  /* enforce single spacing so that Georgia works */

  margin-top: 0px;
  margin-bottom: 8px;
}

h2 {
  font-size: 12pt;
  font-weight: normal;
  font-family: georgia, serif;
  line-height: 1.1em; /* enforce single spacing so that Georgia works */

  margin-top: 2px;
  margin-bottom: 20px;
}


body {
  background-color: white;
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 10pt;
}

a,
a:visited,
a:hover {
  color: #3D58A2;
}

span {
  padding: 0px;
}

/* hide this initially */
#codeIsRunning, #aboveTheFoldWarningMsg {
  display: none;
  color: #e93f34;
  font-size: 11pt;
  margin-bottom: 15px;
}

#codeIsRunning {
  font-weight: bold;
}

#optionsPane {
  margin-top: 15px;
  margin-bottom: 20px;
  line-height: 150%;
}

#pyInputPane, #loadingPane {
  /*margin-top: 10px;*/
  margin-bottom: 15px;
  max-width: 700px;
}

#loadingPane {
  margin-bottom: 5px;
}

#codeInputPane {
  margin-top: 5px;
  font-size: 12pt;
  border: 1px solid #ddd;
}

#codeInputWarnings {
  margin-bottom: 8px;
}

button.smallBtn {
  font-size: 10pt;
  padding: 3px;
}

button.bigBtn {
  font-size: 11.5pt;
  padding: 5px;
  margin-top: 0px;
}

button.surveyBtn {
  font-size: 8pt;
  margin-top: 8px;
}

button.surveyBtnBig {
  font-size: 11pt;
  padding: 5px;
  margin-top: 0px;
}

/* bottom ad below the visualizer */
#google_ad {
  /* original size and position */
  /*
  max-width: 500px;
  margin-top: 70px;
  margin-bottom: 10px;
  */

  /* settings up to 2022-10-05 */
  /* don't set a max-height since the ad may overlap with the text below if we do */
  /*
  max-width: 600px;
  margin-top: 70px;
  margin-bottom: 25px;
  */

  /* settings as of 2022-10-05 - i tried to set max-height to make the
     ads a bit shorter but it seems to get overridden by some other
     code, maybe AdSense code?!? so max-height doesn't seem to work.
     oh wells, i decreased margin-top so ad is closer to the content above it */
  max-width: 600px;
  margin-top: 80px; /* 2022-10-14: go from 50px -> 80px */
  margin-bottom: 15px;
}


#google_righthand_ad {
  margin-left: 150px;

  /* original ... */
  /* margin-left: 100px; */

  /* i think we need to set explicit bounds since it's inside a td?!? */
  min-width: 200px;
  max-width: 300px;
  min-height: 400px;
  max-height: 600px;
}

#google_righthand_ad #adheader {
  text-align: center;
  margin-bottom: 50px;
  font-size: 8pt;
}

#header {
  font-size: 14pt;

  margin-top: 15px;
  margin-bottom: 25px;

  /* yoinked from index.css #learnHeader */
  color: #062270;
  font-family: verdana, arial, helvetica, sans-serif;
  font-weight: bold;
}

#footer {
  color: #999;
  font-size: 9pt;
  /*
  border-top: 1px solid #bbbbbb;
  padding-top: 5px;
  margin-top: 5px;
  */

  max-width: 90%;

  /*max-width: 700px;*/
}

/* set overall alignment of all elements */
#header,
#pyOutputPane,
#pyInputPane,
#loadingPane,
#google_ad,
#footer {
  /* left align */
  margin-left: 20px;
  /* center align */
  /*
  margin-left: auto;
  margin-right: auto;
  */
}

#pyOutputPane {
  /* if a google_righthand_ad appears to the right of it, leave some
     room for it and make it not jiggle around horizontally as much */
  min-width: 900px;
  /* also leave some room above the google_ad below the code */
  min-height: 400px;
}

#frontendErrorOutput {
  color: #e93f34; /* should match brightRed JavaScript variable */
  font-size: 12pt;
  margin-top: 8px;

  /* super-hacky -- set min-width to something huge so that long error messages
     don't word-wrap and look misaligned. instead this just overflows them: */
  min-width: 2000px;

  /* VERY IMPORTANT to use a monospace font or else characters in
     multi-line error messages (e.g., in Python) won't align properly
     and users may get confused */
  font-family: Courier, monospace;
}

#frontendErrorSubheading {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 10pt;
  color: #666;
  margin-top: 8px;
  margin-bottom: 8px;
}

.togetherjsBtn {
  /*color: #b80000;*/
  /*color: #e93f34;*/
  padding: 4px;
  margin-bottom: 3px;
}

/* make this a fixed size with scrollbars for overflow so that the UI doesn't jitter up and down */
#publicHelpQueue {
  overflow: auto;
  height: 75px;
  margin-bottom: 15px;
  margin-left: 10px;
  font-size: 9pt;
}

.helpQueueSmallText {
  color: #777;
  font-size: 8pt;
}

.redBold {
  font-weight: bold;
  color: #e93f34;
}

#stopRequestHelpBtn {
  font-size: 9pt;
  padding: 2px;
}

#moderationPanel {
  font-size: 10pt;
  margin-bottom: 5pt;
  min-height: 16pt; /* just so things don't jiggle around vertically too much */
  padding-top: 6px;
  padding-bottom: 6px;
  padding-left: 6px;
  padding-right: 6px;
  border: 1px solid #e93f34;
}

.kickLink {
  font-size: 10pt;
  margin-right: 4px;
}


#syncBtn {
 font-size: 8pt;
 margin-left: 0px;
}

#surveyHeader {
  margin-left: 100px;
}

.surveyQ {
  font-size: 9pt;
  padding: 2px;
}

/* necessary for CodeMirror error line highlighting to work! */
.CodeMirror .errorLine { background: #ffff3f !important; }


/* from http://rog.ie/blog/css-star-rater */
.star-rating {
  font-size: 0;
  white-space: nowrap;
  display: inline-block;
  /* pgbovine - scale this appropriately with a 5:1 ratio */
  width: 100px;
  height: 20px;
  overflow: hidden;
  position: relative;
  background: url('');
  background-size: contain;
}
.star-rating i {
  opacity: 0;
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 20%;
  z-index: 1;
  background: url('');
  background-size: contain;
}
.star-rating input {
  -moz-appearance: none;
  -webkit-appearance: none;
  opacity: 0;
  display: inline-block;
  width: 20%;
  height: 100%;
  margin: 0;
  padding: 0;
  z-index: 2;
  position: relative;
}
.star-rating input:hover + i,
.star-rating input:checked + i {
  opacity: 1;
}
.star-rating i ~ i {
  width: 40%;
}
.star-rating i ~ i ~ i {
  width: 60%;
}
.star-rating i ~ i ~ i ~ i {
  width: 80%;
}
.star-rating i ~ i ~ i ~ i ~ i {
  width: 100%;
}


#syntaxErrBubbleContents {
  font-size: 9.5pt;
  cursor: default;
}

#syntaxErrHeader {
  margin-bottom: 3pt;
}

#syntaxErrCodeDisplay {
  border: 1px solid #ddd;
}

#syntaxErrMsg {
  color: #e93f34; /* should match brightRed JavaScript variable */
  font-size: 10pt;
  margin-top: 3pt;
  margin-bottom: 2pt;

  /* super-hacky -- set min-width to something huge so that long error messages
     don't word-wrap and look misaligned. instead this truncates long lines: */
  min-width: 2000px;

  /* VERY IMPORTANT to use a monospace font or else characters in
     multi-line error messages (e.g., in Python) won't align properly
     and users may get confused. try to match css of #frontendErrorOutput */
  font-family: Courier, monospace;
}

#syntaxErrQuestion {
  margin-top: 12px;
}

#syntaxErrTxtInput {
  margin-top: 3px;
  margin-bottom: 6px;
  padding: 2px;
}

#syntaxErrSubmitBtn, #syntaxErrCloseBtn {
  margin-right: 8px;
}

#syntaxErrHideAllLink {
  font-size: 8pt;
}

#testCasesPane {
 margin-top: 5px;
 margin-bottom: 25px;
}

#exampleSnippets {
 border-top: 1px solid #ccc;
 margin-top: 15px;
}

#showExampleLink {
  margin-top: 15px;
}

#instructionsPane {
 margin-bottom: 10px;
}

/* for SyntaxErrorSurveyBubble */

textarea.bubbleInputText {
  font-family: verdana, arial, helvetica, sans-serif;
	font-size: 9pt;
	line-height: 1.3em;
}

.qtip-content {
	color: #333;
	background-color: #ffffff;

	max-width: 390px;
	width: 390px;

	border: 2px solid #e93f34;

  cursor: pointer;

	*border-right-width: 2px;
	*border-bottom-width: 2px;

	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
	border-radius: 5px;

	-webkit-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2);
	-moz-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2);
	box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2);

	-webkit-background-clip: padding-box;
	-moz-background-clip: padding;
	background-clip: padding-box;
}

#optHeader {
  font-family: Georgia, Palatino, Times, serif;
  font-size: 14pt;
  margin-bottom: 13px;
  margin-left: 16px;
  line-height: 1.4em;
}

#demoVis {
  margin-left: 16px;
  margin-top: 10px;
  margin-bottom: 15px;
  padding-bottom: 10px;
  border-bottom: 1px solid gray;
}

#executeBtn {
  margin-right: 8px;
}
</style><style>/*! jQuery UI - v1.11.4 - 2015-03-11
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */

/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
	display: none;
}
.ui-helper-hidden-accessible {
	border: 0;
	clip: rect(0 0 0 0);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
}
.ui-helper-reset {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	line-height: 1.3;
	text-decoration: none;
	font-size: 100%;
	list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
	content: "";
	display: table;
	border-collapse: collapse;
}
.ui-helper-clearfix:after {
	clear: both;
}
.ui-helper-clearfix {
	min-height: 0; /* support: IE7 */
}
.ui-helper-zfix {
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	position: absolute;
	opacity: 0;
	filter:Alpha(Opacity=0); /* support: IE8 */
}

.ui-front {
	z-index: 100;
}


/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
	cursor: default !important;
}


/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
	display: block;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
}


/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}
.ui-accordion .ui-accordion-header {
	display: block;
	cursor: pointer;
	position: relative;
	margin: 2px 0 0 0;
	padding: .5em .5em .5em .7em;
	min-height: 0; /* support: IE7 */
	font-size: 100%;
}
.ui-accordion .ui-accordion-icons {
	padding-left: 2.2em;
}
.ui-accordion .ui-accordion-icons .ui-accordion-icons {
	padding-left: 2.2em;
}
.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
	position: absolute;
	left: .5em;
	top: 50%;
	margin-top: -8px;
}
.ui-accordion .ui-accordion-content {
	padding: 1em 2.2em;
	border-top: 0;
	overflow: auto;
}
.ui-autocomplete {
	position: absolute;
	top: 0;
	left: 0;
	cursor: default;
}
.ui-button {
	display: inline-block;
	position: relative;
	padding: 0;
	line-height: normal;
	margin-right: .1em;
	cursor: pointer;
	vertical-align: middle;
	text-align: center;
	overflow: visible; /* removes extra width in IE */
}
.ui-button,
.ui-button:link,
.ui-button:visited,
.ui-button:hover,
.ui-button:active {
	text-decoration: none;
}
/* to make room for the icon, a width needs to be set here */
.ui-button-icon-only {
	width: 2.2em;
}
/* button elements seem to need a little more width */
button.ui-button-icon-only {
	width: 2.4em;
}
.ui-button-icons-only {
	width: 3.4em;
}
button.ui-button-icons-only {
	width: 3.7em;
}

/* button text element */
.ui-button .ui-button-text {
	display: block;
	line-height: normal;
}
.ui-button-text-only .ui-button-text {
	padding: .4em 1em;
}
.ui-button-icon-only .ui-button-text,
.ui-button-icons-only .ui-button-text {
	padding: .4em;
	text-indent: -9999999px;
}
.ui-button-text-icon-primary .ui-button-text,
.ui-button-text-icons .ui-button-text {
	padding: .4em 1em .4em 2.1em;
}
.ui-button-text-icon-secondary .ui-button-text,
.ui-button-text-icons .ui-button-text {
	padding: .4em 2.1em .4em 1em;
}
.ui-button-text-icons .ui-button-text {
	padding-left: 2.1em;
	padding-right: 2.1em;
}
/* no icon support for input elements, provide padding by default */
input.ui-button {
	padding: .4em 1em;
}

/* button icon element(s) */
.ui-button-icon-only .ui-icon,
.ui-button-text-icon-primary .ui-icon,
.ui-button-text-icon-secondary .ui-icon,
.ui-button-text-icons .ui-icon,
.ui-button-icons-only .ui-icon {
	position: absolute;
	top: 50%;
	margin-top: -8px;
}
.ui-button-icon-only .ui-icon {
	left: 50%;
	margin-left: -8px;
}
.ui-button-text-icon-primary .ui-button-icon-primary,
.ui-button-text-icons .ui-button-icon-primary,
.ui-button-icons-only .ui-button-icon-primary {
	left: .5em;
}
.ui-button-text-icon-secondary .ui-button-icon-secondary,
.ui-button-text-icons .ui-button-icon-secondary,
.ui-button-icons-only .ui-button-icon-secondary {
	right: .5em;
}

/* button sets */
.ui-buttonset {
	margin-right: 7px;
}
.ui-buttonset .ui-button {
	margin-left: 0;
	margin-right: -.3em;
}

/* workarounds */
/* reset extra padding in Firefox, see h5bp.com/l */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
	border: 0;
	padding: 0;
}
.ui-datepicker {
	width: 17em;
	padding: .2em .2em 0;
	display: none;
}
.ui-datepicker .ui-datepicker-header {
	position: relative;
	padding: .2em 0;
}
.ui-datepicker .ui-datepicker-prev,
.ui-datepicker .ui-datepicker-next {
	position: absolute;
	top: 2px;
	width: 1.8em;
	height: 1.8em;
}
.ui-datepicker .ui-datepicker-prev-hover,
.ui-datepicker .ui-datepicker-next-hover {
	top: 1px;
}
.ui-datepicker .ui-datepicker-prev {
	left: 2px;
}
.ui-datepicker .ui-datepicker-next {
	right: 2px;
}
.ui-datepicker .ui-datepicker-prev-hover {
	left: 1px;
}
.ui-datepicker .ui-datepicker-next-hover {
	right: 1px;
}
.ui-datepicker .ui-datepicker-prev span,
.ui-datepicker .ui-datepicker-next span {
	display: block;
	position: absolute;
	left: 50%;
	margin-left: -8px;
	top: 50%;
	margin-top: -8px;
}
.ui-datepicker .ui-datepicker-title {
	margin: 0 2.3em;
	line-height: 1.8em;
	text-align: center;
}
.ui-datepicker .ui-datepicker-title select {
	font-size: 1em;
	margin: 1px 0;
}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
	width: 45%;
}
.ui-datepicker table {
	width: 100%;
	font-size: .9em;
	border-collapse: collapse;
	margin: 0 0 .4em;
}
.ui-datepicker th {
	padding: .7em .3em;
	text-align: center;
	font-weight: bold;
	border: 0;
}
.ui-datepicker td {
	border: 0;
	padding: 1px;
}
.ui-datepicker td span,
.ui-datepicker td a {
	display: block;
	padding: .2em;
	text-align: right;
	text-decoration: none;
}
.ui-datepicker .ui-datepicker-buttonpane {
	background-image: none;
	margin: .7em 0 0 0;
	padding: 0 .2em;
	border-left: 0;
	border-right: 0;
	border-bottom: 0;
}
.ui-datepicker .ui-datepicker-buttonpane button {
	float: right;
	margin: .5em .2em .4em;
	cursor: pointer;
	padding: .2em .6em .3em .6em;
	width: auto;
	overflow: visible;
}
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
	float: left;
}

/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi {
	width: auto;
}
.ui-datepicker-multi .ui-datepicker-group {
	float: left;
}
.ui-datepicker-multi .ui-datepicker-group table {
	width: 95%;
	margin: 0 auto .4em;
}
.ui-datepicker-multi-2 .ui-datepicker-group {
	width: 50%;
}
.ui-datepicker-multi-3 .ui-datepicker-group {
	width: 33.3%;
}
.ui-datepicker-multi-4 .ui-datepicker-group {
	width: 25%;
}
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
	border-left-width: 0;
}
.ui-datepicker-multi .ui-datepicker-buttonpane {
	clear: left;
}
.ui-datepicker-row-break {
	clear: both;
	width: 100%;
	font-size: 0;
}

/* RTL support */
.ui-datepicker-rtl {
	direction: rtl;
}
.ui-datepicker-rtl .ui-datepicker-prev {
	right: 2px;
	left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next {
	left: 2px;
	right: auto;
}
.ui-datepicker-rtl .ui-datepicker-prev:hover {
	right: 1px;
	left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next:hover {
	left: 1px;
	right: auto;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane {
	clear: right;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
	float: left;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
.ui-datepicker-rtl .ui-datepicker-group {
	float: right;
}
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
	border-right-width: 0;
	border-left-width: 1px;
}
.ui-dialog {
	overflow: hidden;
	position: absolute;
	top: 0;
	left: 0;
	padding: .2em;
	outline: 0;
}
.ui-dialog .ui-dialog-titlebar {
	padding: .4em 1em;
	position: relative;
}
.ui-dialog .ui-dialog-title {
	float: left;
	margin: .1em 0;
	white-space: nowrap;
	width: 90%;
	overflow: hidden;
	text-overflow: ellipsis;
}
.ui-dialog .ui-dialog-titlebar-close {
	position: absolute;
	right: .3em;
	top: 50%;
	width: 20px;
	margin: -10px 0 0 0;
	padding: 1px;
	height: 20px;
}
.ui-dialog .ui-dialog-content {
	position: relative;
	border: 0;
	padding: .5em 1em;
	background: none;
	overflow: auto;
}
.ui-dialog .ui-dialog-buttonpane {
	text-align: left;
	border-width: 1px 0 0 0;
	background-image: none;
	margin-top: .5em;
	padding: .3em 1em .5em .4em;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
	float: right;
}
.ui-dialog .ui-dialog-buttonpane button {
	margin: .5em .4em .5em 0;
	cursor: pointer;
}
.ui-dialog .ui-resizable-se {
	width: 12px;
	height: 12px;
	right: -5px;
	bottom: -5px;
	background-position: 16px 16px;
}
.ui-draggable .ui-dialog-titlebar {
	cursor: move;
}
.ui-draggable-handle {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-menu {
	list-style: none;
	padding: 0;
	margin: 0;
	display: block;
	outline: none;
}
.ui-menu .ui-menu {
	position: absolute;
}
.ui-menu .ui-menu-item {
	position: relative;
	margin: 0;
	padding: 3px 1em 3px .4em;
	cursor: pointer;
	min-height: 0; /* support: IE7 */
	/* support: IE10, see #8844 */
	list-style-image: url("");
}
.ui-menu .ui-menu-divider {
	margin: 5px 0;
	height: 0;
	font-size: 0;
	line-height: 0;
	border-width: 1px 0 0 0;
}
.ui-menu .ui-state-focus,
.ui-menu .ui-state-active {
	margin: -1px;
}

/* icon support */
.ui-menu-icons {
	position: relative;
}
.ui-menu-icons .ui-menu-item {
	padding-left: 2em;
}

/* left-aligned */
.ui-menu .ui-icon {
	position: absolute;
	top: 0;
	bottom: 0;
	left: .2em;
	margin: auto 0;
}

/* right-aligned */
.ui-menu .ui-menu-icon {
	left: auto;
	right: 0;
}
.ui-progressbar {
	height: 2em;
	text-align: left;
	overflow: hidden;
}
.ui-progressbar .ui-progressbar-value {
	margin: -1px;
	height: 100%;
}
.ui-progressbar .ui-progressbar-overlay {
	background: url("");
	height: 100%;
	filter: alpha(opacity=25); /* support: IE8 */
	opacity: 0.25;
}
.ui-progressbar-indeterminate .ui-progressbar-value {
	background-image: none;
}
.ui-resizable {
	position: relative;
}
.ui-resizable-handle {
	position: absolute;
	font-size: 0.1px;
	display: block;
	-ms-touch-action: none;
	touch-action: none;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
	display: none;
}
.ui-resizable-n {
	cursor: n-resize;
	height: 7px;
	width: 100%;
	top: -5px;
	left: 0;
}
.ui-resizable-s {
	cursor: s-resize;
	height: 7px;
	width: 100%;
	bottom: -5px;
	left: 0;
}
.ui-resizable-e {
	cursor: e-resize;
	width: 7px;
	right: -5px;
	top: 0;
	height: 100%;
}
.ui-resizable-w {
	cursor: w-resize;
	width: 7px;
	left: -5px;
	top: 0;
	height: 100%;
}
.ui-resizable-se {
	cursor: se-resize;
	width: 12px;
	height: 12px;
	right: 1px;
	bottom: 1px;
}
.ui-resizable-sw {
	cursor: sw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	bottom: -5px;
}
.ui-resizable-nw {
	cursor: nw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	top: -5px;
}
.ui-resizable-ne {
	cursor: ne-resize;
	width: 9px;
	height: 9px;
	right: -5px;
	top: -5px;
}
.ui-selectable {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-selectable-helper {
	position: absolute;
	z-index: 100;
	border: 1px dotted black;
}
.ui-selectmenu-menu {
	padding: 0;
	margin: 0;
	position: absolute;
	top: 0;
	left: 0;
	display: none;
}
.ui-selectmenu-menu .ui-menu {
	overflow: auto;
	/* Support: IE7 */
	overflow-x: hidden;
	padding-bottom: 1px;
}
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
	font-size: 1em;
	font-weight: bold;
	line-height: 1.5;
	padding: 2px 0.4em;
	margin: 0.5em 0 0 0;
	height: auto;
	border: 0;
}
.ui-selectmenu-open {
	display: block;
}
.ui-selectmenu-button {
	display: inline-block;
	overflow: hidden;
	position: relative;
	text-decoration: none;
	cursor: pointer;
}
.ui-selectmenu-button span.ui-icon {
	right: 0.5em;
	left: auto;
	margin-top: -8px;
	position: absolute;
	top: 50%;
}
.ui-selectmenu-button span.ui-selectmenu-text {
	text-align: left;
	padding: 0.4em 2.1em 0.4em 1em;
	display: block;
	line-height: 1.4;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.ui-slider {
	position: relative;
	text-align: left;
}
.ui-slider .ui-slider-handle {
	position: absolute;
	z-index: 2;
	width: 1.2em;
	height: 1.2em;
	cursor: default;
	-ms-touch-action: none;
	touch-action: none;
}
.ui-slider .ui-slider-range {
	position: absolute;
	z-index: 1;
	font-size: .7em;
	display: block;
	border: 0;
	background-position: 0 0;
}

/* support: IE8 - See #6727 */
.ui-slider.ui-state-disabled .ui-slider-handle,
.ui-slider.ui-state-disabled .ui-slider-range {
	filter: inherit;
}

.ui-slider-horizontal {
	height: .8em;
}
.ui-slider-horizontal .ui-slider-handle {
	top: -.3em;
	margin-left: -.6em;
}
.ui-slider-horizontal .ui-slider-range {
	top: 0;
	height: 100%;
}
.ui-slider-horizontal .ui-slider-range-min {
	left: 0;
}
.ui-slider-horizontal .ui-slider-range-max {
	right: 0;
}

.ui-slider-vertical {
	width: .8em;
	height: 100px;
}
.ui-slider-vertical .ui-slider-handle {
	left: -.3em;
	margin-left: 0;
	margin-bottom: -.6em;
}
.ui-slider-vertical .ui-slider-range {
	left: 0;
	width: 100%;
}
.ui-slider-vertical .ui-slider-range-min {
	bottom: 0;
}
.ui-slider-vertical .ui-slider-range-max {
	top: 0;
}
.ui-sortable-handle {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-spinner {
	position: relative;
	display: inline-block;
	overflow: hidden;
	padding: 0;
	vertical-align: middle;
}
.ui-spinner-input {
	border: none;
	background: none;
	color: inherit;
	padding: 0;
	margin: .2em 0;
	vertical-align: middle;
	margin-left: .4em;
	margin-right: 22px;
}
.ui-spinner-button {
	width: 16px;
	height: 50%;
	font-size: .5em;
	padding: 0;
	margin: 0;
	text-align: center;
	position: absolute;
	cursor: default;
	display: block;
	overflow: hidden;
	right: 0;
}
/* more specificity required here to override default borders */
.ui-spinner a.ui-spinner-button {
	border-top: none;
	border-bottom: none;
	border-right: none;
}
/* vertically center icon */
.ui-spinner .ui-icon {
	position: absolute;
	margin-top: -8px;
	top: 50%;
	left: 0;
}
.ui-spinner-up {
	top: 0;
}
.ui-spinner-down {
	bottom: 0;
}

/* TR overrides */
.ui-spinner .ui-icon-triangle-1-s {
	/* need to fix icons sprite */
	background-position: -65px -16px;
}
.ui-tabs {
	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
	padding: .2em;
}
.ui-tabs .ui-tabs-nav {
	margin: 0;
	padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li {
	list-style: none;
	float: left;
	position: relative;
	top: 0;
	margin: 1px .2em 0 0;
	border-bottom-width: 0;
	padding: 0;
	white-space: nowrap;
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
	float: left;
	padding: .5em 1em;
	text-decoration: none;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
	margin-bottom: -1px;
	padding-bottom: 1px;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
	cursor: text;
}
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
	cursor: pointer;
}
.ui-tabs .ui-tabs-panel {
	display: block;
	border-width: 0;
	padding: 1em 1.4em;
	background: none;
}
.ui-tooltip {
	padding: 8px;
	position: absolute;
	z-index: 9999;
	max-width: 300px;
	-webkit-box-shadow: 0 0 5px #aaa;
	box-shadow: 0 0 5px #aaa;
}
body .ui-tooltip {
	border-width: 2px;
}

/* Component containers
----------------------------------*/
.ui-widget {
	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
	font-size: 1.1em;
}
.ui-widget .ui-widget {
	font-size: 1em;
}
.ui-widget input,
.ui-widget select,
.ui-widget textarea,
.ui-widget button {
	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
	font-size: 1em;
}
.ui-widget-content {
	border: 1px solid #dddddd;
	background: #eeeeee url() 50% top repeat-x;
	color: #333333;
}
.ui-widget-content a {
	color: #333333;
}
.ui-widget-header {
	border: 1px solid #e78f08;
	background: #f6a828 url() 50% 50% repeat-x;
	color: #ffffff;
	font-weight: bold;
}
.ui-widget-header a {
	color: #ffffff;
}

/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default {
	border: 1px solid #cccccc;
	background: #f6f6f6 url() 50% 50% repeat-x;
	font-weight: bold;
	color: #1c94c4;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited {
	color: #1c94c4;
	text-decoration: none;
}
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus {
	border: 1px solid #fbcb09;
	background: #fdf5ce url() 50% 50% repeat-x;
	font-weight: bold;
	color: #c77405;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited,
.ui-state-focus a,
.ui-state-focus a:hover,
.ui-state-focus a:link,
.ui-state-focus a:visited {
	color: #c77405;
	text-decoration: none;
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active {
	border: 1px solid #fbd850;
	background: #ffffff url() 50% 50% repeat-x;
	font-weight: bold;
	color: #eb8f00;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
	color: #eb8f00;
	text-decoration: none;
}

/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
	border: 1px solid #fed22f;
	background: #ffe45c url() 50% top repeat-x;
	color: #363636;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
	color: #363636;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
	border: 1px solid #cd0a0a;
	background: #b81900 url() 50% 50% repeat;
	color: #ffffff;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
	color: #ffffff;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
	color: #ffffff;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
	font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
	opacity: .7;
	filter:Alpha(Opacity=70); /* support: IE8 */
	font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
	opacity: .35;
	filter:Alpha(Opacity=35); /* support: IE8 */
	background-image: none;
}
.ui-state-disabled .ui-icon {
	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
}

/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
	width: 16px;
	height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
	background-image: url();
}
.ui-widget-header .ui-icon {
	background-image: url();
}
.ui-state-default .ui-icon {
	background-image: url();
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon {
	background-image: url();
}
.ui-state-active .ui-icon {
	background-image: url();
}
.ui-state-highlight .ui-icon {
	background-image: url();
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
	background-image: url();
}

/* positioning */
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }


/* Misc visuals
----------------------------------*/

/* Corner radius */
.ui-corner-all,
.ui-corner-top,
.ui-corner-left,
.ui-corner-tl {
	border-top-left-radius: 4px;
}
.ui-corner-all,
.ui-corner-top,
.ui-corner-right,
.ui-corner-tr {
	border-top-right-radius: 4px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-left,
.ui-corner-bl {
	border-bottom-left-radius: 4px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-right,
.ui-corner-br {
	border-bottom-right-radius: 4px;
}

/* Overlays */
.ui-widget-overlay {
	background: #666666 url() 50% 50% repeat;
	opacity: .5;
	filter: Alpha(Opacity=50); /* support: IE8 */
}
.ui-widget-shadow {
	margin: -5px 0 0 -5px;
	padding: 5px;
	background: #000000 url() 50% 50% repeat-x;
	opacity: .2;
	filter: Alpha(Opacity=20); /* support: IE8 */
	border-radius: 5px;
}
</style><style>/*

Online Python Tutor

Copyright (C) Philip J. Guo

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

*/

/* Most recent color scheme redesign on 2012-08-19 */

/* To prevent CSS namespace clashes, prefix all rules with:
     div.ExecutionVisualizer
*/


/* reset some styles to nullify effects of existing stylesheets
   e.g., http://meyerweb.com/eric/tools/css/reset/
*/
div.ExecutionVisualizer {
  /* none for now */
}

div.ExecutionVisualizer table.visualizer {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 10pt;
  margin-bottom: 10px;
}

div.ExecutionVisualizer table.visualizer td.vizLayoutTd {
  vertical-align: top;
}

div.ExecutionVisualizer td#stack_td,
div.ExecutionVisualizer td#heap_td {
  vertical-align:top;
  font-size: 10pt; /* don't make fonts in the heap so big! */
}

div.ExecutionVisualizer #dataViz {
  /*margin-left: 25px;*/
}

div.ExecutionVisualizer #selectiveHideStatus {
  font-size: 9pt;
  margin-top: 20px;
  margin-left: 13px;
}

div.ExecutionVisualizer #cppDetailPane {
  font-size: 10pt;
  margin-top: 15px;
  margin-left: 13px; /* match what #selectiveHideStatus uses */
}

/*
div.ExecutionVisualizer div#codeDisplayDiv {
  width: 550px;
}
*/

div.ExecutionVisualizer div#pyCodeOutputDiv {
  /*max-width: 550px;*/
  max-height: 460px;
  /*max-height: 620px;*/
  overflow: auto;
  margin-bottom: 4px;

  margin-left: auto;
  margin-right: auto;
}

div.ExecutionVisualizer table#pyCodeOutput {
  font-family: Andale mono, monospace;
  /*font-size:12pt;*/
  font-size:11pt;
  line-height:1.1em;

  border-collapse: separate; /* some crazy CSS voodoo that needs to be
                                there so that SVG arrows to the left
                                of the code line up vertically in Chrome */
  border-spacing: 0px;
  border-top: 1px solid #bbb;
  padding-top: 3px;
  border-bottom: 1px solid #bbb;
  /*margin-top: 6px;*/
  margin: 6px auto; /* Center code in its pane */
}

/* don't wrap lines within code output ... FORCE scrollbars to appear */
div.ExecutionVisualizer table#pyCodeOutput td {
  white-space: nowrap;
  vertical-align: middle; /* explicitly force, to override external CSS conflicts */
}

div.ExecutionVisualizer #leftCodeGutterSVG {
  width: 18px;
  min-width: 18px; /* make sure it doesn't squash too thin */
  height: 0px; /* programmatically set this later ... IE needs this to
                  be 0 or it defaults to something arbitrary and gross */
}

div.ExecutionVisualizer #prevLegendArrowSVG,
div.ExecutionVisualizer #curLegendArrowSVG {
  width: 18px;
  height: 10px;
}

div.ExecutionVisualizer .arrow {
  font-size: 16pt;
}

div.ExecutionVisualizer table#pyCodeOutput .lineNo {
  color: #aaa;
  padding: 0.2em;
  padding-left: 0.3em;
  padding-right: 0.5em;
  text-align: right;
}

div.ExecutionVisualizer table#pyCodeOutput .cod {
  /*font-weight: bold;*/
  margin-left: 3px;
  padding-left: 7px;
  text-align: left; /* necessary or else doesn't work properly in IE */
}

div.ExecutionVisualizer div#progOutputs {
  margin-left: 13px; /* line up with heap visualizations */
  margin-bottom: 3px;
}

div.ExecutionVisualizer div#legendDiv {
  padding: 0px;
  text-align: left;
  color: #666;
  font-size: 8pt;
  line-height: 1.5;
}

div.ExecutionVisualizer div#editCodeLinkDiv {
  text-align: center;
  margin-bottom: 7px;
  font-size: 10pt;
}

div.ExecutionVisualizer div#annotateLinkDiv {
  /*text-align: left;*/
  margin-top: 0px;
  margin-bottom: 12px;
  /*
  margin-left: auto;
  margin-right: auto;
  */
}

div.ExecutionVisualizer div#stepAnnotationDiv {
  margin-bottom: 12px;
}

div.ExecutionVisualizer textarea#stepAnnotationEditor,
div.ExecutionVisualizer textarea#vizTitleEditor,
div.ExecutionVisualizer textarea#vizDescriptionEditor {
  border: 1px solid #999999;
  padding: 4px;

  overflow: auto; /* to look pretty on IE */
  /* make sure textarea doesn't grow and stretch */
  resize: none;
}


div.ExecutionVisualizer #errorOutput {
  color: #e93f34; /* should match brightRed JavaScript variable */
  font-size: 12pt;
  margin-top: 10px;
  margin-bottom: 10px;
  /* VERY IMPORTANT to use a monospace font or else characters in
     multi-line error messages (e.g., in Python) won't align properly
     and users may get confused. get inspired by #frontendErrorOutput in opt-frontend.css */
  font-family: Courier, monospace;

  min-width: 2000px; /* purposely make this wider so that warnings hopefully don't line-wrap */
}

div.ExecutionVisualizer #errorOutputFooter {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 9pt;
  color: #666;
  margin-top: 8px;
  margin-bottom: 8px;
}

/* display compiler warnings like from gcc/g++ for C/C++ */
div.ExecutionVisualizer #warningsOutput {
  font-family: Andale mono, monospace; /* need a monospace font so that different lines of warning messages can align properly */
  color: #666;
  font-size: 7.5pt; /* make it tiny */
  padding-top: 12px;
  padding-bottom: 6px;

  min-width: 2000px; /* purposely make this wider so that warnings hopefully don't line-wrap */
}

/* VCR control buttons for stepping through execution */

div.ExecutionVisualizer #vcrControls {
  margin-top: 15px;
  margin-bottom: 6px;
  /*width: 100%;*/
  text-align: center;
}

div.ExecutionVisualizer #vcrControls button {
  margin-left: 2px;
  margin-right: 2px;
}

div.ExecutionVisualizer #curInstr {
  text-align: center;
}

div.ExecutionVisualizer #pyStdout {
  border: 1px solid #999999;
  font-size: 10pt;
  padding: 3px;
  font-family: Andale mono, monospace;

  overflow: auto; /* to look pretty on IE */
  /* make sure textarea doesn't grow and stretch */
  resize: none;
}


div.ExecutionVisualizer .vizFrame {
  margin-bottom: 20px;
  padding-left: 8px;
  border-left: 2px solid #cccccc;
}


/* Rendering of primitive types */

div.ExecutionVisualizer .importedObj {
  font-size: 8pt;
}

div.ExecutionVisualizer .nullObj {
/*  font-size: 8pt; */
}

div.ExecutionVisualizer .stringObj,
div.ExecutionVisualizer .customObj,
div.ExecutionVisualizer .funcObj {
  font-family: Andale mono, monospace;
  white-space: nowrap;
}

div.ExecutionVisualizer .funcCode {
  font-size: 8pt;
}

div.ExecutionVisualizer .retval {
  font-size: 9pt;
}

div.ExecutionVisualizer .stackFrame .retval {
  color: #e93f34; /* highlight non-zombie stack frame return values -
                     should match brightRed JavaScript variable */
}

/* Rendering of basic compound types */

div.ExecutionVisualizer table.listTbl,
div.ExecutionVisualizer table.tupleTbl,
div.ExecutionVisualizer table.setTbl {
  background-color: #ffffc6;
}


div.ExecutionVisualizer table.listTbl {
  border: 0px solid black;
  border-spacing: 0px;
}

div.ExecutionVisualizer table.listTbl td.listHeader,
div.ExecutionVisualizer table.tupleTbl td.tupleHeader {
  padding-left: 4px;
  padding-top: 2px;
  padding-bottom: 3px;
  font-size: 8pt;
  color: #777;
  text-align: left;
  border-left: 1px solid #555555;
}

div.ExecutionVisualizer table.tupleTbl {
  border-spacing: 0px;
  color: black;

  border-bottom: 1px solid #555555; /* must match td.tupleHeader border */
  border-top: 1px solid #555555; /* must match td.tupleHeader border */
  border-right: 1px solid #555555; /* must match td.tupleHeader border */
}


div.ExecutionVisualizer table.listTbl td.listElt {
  border-bottom: 1px solid #555555; /* must match td.listHeader border */
  border-left: 1px solid #555555; /* must match td.listHeader border */
}


/* for C and C++ visualizations */

/* make this slightly more compact than listTbl since arrays can be
   rendered on the stack so we want to kinda conserve space */
div.ExecutionVisualizer table.cArrayTbl {
  background-color: #ffffc6;
  padding-left: 0px;
  padding-top: 0px;
  padding-bottom: 0px;
  /*font-size: 8pt;*/

  color: #777;
  text-align: left;
  border: 0px solid black;
  border-spacing: 0px;
}

div.ExecutionVisualizer table.cArrayTbl td.cArrayHeader {
  padding-left: 5px;
  padding-top: 0px;
  padding-bottom: 2px;
  font-size: 6pt;
  color: #777;
  text-align: left;
  border-bottom: 0px solid black; /* override whatever we're nested in */
}

div.ExecutionVisualizer table.cArrayTbl td.cArrayElt {
  border-bottom: 1px solid #888;
  border-left: 1px solid #888;
  border-top: 0px solid black;
  color: black;

  padding-top: 2px;
  padding-bottom: 4px;
  padding-left: 5px;
  padding-right: 4px;
  vertical-align: top; /* this was previously bottom but 'top' might look better when cppShowBinary is on */

  /* 2022-10-13 - add "position: relative;" here since we want to put spans INSIDE
     of it with "position: absolute" in order to position them absolutely *within*
     a .cArrayElt element, which is itself positioned relatively ... */
  position: relative;
}

/* 2022-10-13 - added to give jsPlumb arrows a place to anchor just to the left
   and right of C_ARRAY objects so that out-of-bounds pointers can anchor here
   to show that they are barely out-of-bounds */
div.ExecutionVisualizer table.cArrayTbl td.cArrayElt .cArrayOutOfBoundsAnchor {
  font-size: 13pt;

  position: absolute; /* we want to set absolute position inside of a relative positioned parent element .cArrayElt */
  top: 10px; /* a default 'top', but we can set it dynamically in JavaScript for finer control */
  /* set 'left' property dynamically in JavaScript */
}

div.ExecutionVisualizer table.cArrayTbl td.cMultidimArrayHeader {
  padding-left: 5px;
  padding-right: 5px;
  padding-top: 1px;
  padding-bottom: 3px;
  font-size: 6pt;
  color: #777;
  text-align: left;
  border-top: 1px solid #888;
  border-left: 1px solid #888;
  border-bottom: 0px solid black; /* override whatever we're nested in */
}

div.ExecutionVisualizer table.cArrayTbl td.cMultidimArrayElt {
  border-left: 1px solid #888;
  color: black;
  padding-top: 1px;
  padding-bottom: 4px;
  padding-left: 5px;
  padding-right: 5px;
  vertical-align: top; /* this was previously bottom but 'top' might look better when cppShowBinary is on */
}


/* for rendering C_DATA */
div.ExecutionVisualizer .cdataHeader {
  margin-bottom: 5px;
}

div.ExecutionVisualizer .cdataElt {
  font-size: 10pt;

  /* 2022-10-13 - add "position: relative;" here since we want to put spans INSIDE
     of it with "position: absolute" in order to position them absolutely *within*
     a .cdataElt element, which is itself positioned relatively ... */
  position: relative;
}

/* for rendering C_STRUCT, C_UNION, C_ARRAY, and C_MULTIDIMENSIONAL_ARRAY */
div.ExecutionVisualizer .cStructUnion,
div.ExecutionVisualizer .cArray {
  position: relative;

  /* give them some padding since may be embedded within stack frames or arrays, so we don't want them to feel too cramped */
  /* 2023-09-24 - actually comment this out since the padding will already come
     from enclosing elements, so no need to add even more here */
  /*
  padding-left: 3px;
  padding-bottom: 3px;
  */
}

/* for handling 'within_obj' jsPlumb arrow anchors in pytutor.js */
div.ExecutionVisualizer .withinObjAnchor {
  font-size: 11pt; /* make emojis that we put in here a bit smaller */

  position: absolute; /* should be positioned absolutely within a .cdataElt or .cStructUnion, which has position: relative */
  top: 10px; /* a default 'top', but we can set it dynamically in JavaScript for finer control */
  /* set 'left' property dynamically in JavaScript */
}

div.ExecutionVisualizer .cdataUninit {
  color: #888;
}

div.ExecutionVisualizer .paddingField {
  font-size: 0.7em;
  font-style: italic;
}

div.ExecutionVisualizer .cdataHexRep {
  color: #555;
  font-size: 9pt;
  font-family: 'Courier New', Courier, monospace;
  margin-top: 5px;
}

div.ExecutionVisualizer .cdataBinaryRep {
  color: #555;
  margin-top: 3px;
  font-size: 9pt;
  /* important to use fixed-width font so everything aligns well */
  font-family: 'Courier New', Courier, monospace;
}

div.ExecutionVisualizer .memAddrSmall {
  color: #333;
  font-size: 7pt;
  font-family: 'Courier New', Courier, monospace;
}


div.ExecutionVisualizer table.tupleTbl td.tupleElt {
  border-left: 1px solid #555555; /* must match td.tupleHeader border */
}

/* this used to be customObjTbl and customObjElt but i consolidated it into a div */
div.ExecutionVisualizer div.customObj {
  background-color: white;
  color: black;
  border: 1px solid black;
  padding: 5px;
  font-size: 9pt; /* make this smaller */
}

div.ExecutionVisualizer table.listTbl td.listElt,
div.ExecutionVisualizer table.tupleTbl td.tupleElt {
  padding-top: 0px;
  padding-bottom: 8px;
  padding-left: 10px;
  padding-right: 10px;
  vertical-align: bottom;
}

div.ExecutionVisualizer table.setTbl {
  border: 1px solid #555555;
  border-spacing: 0px;
  text-align: center;
}

div.ExecutionVisualizer table.setTbl td.setElt {
  padding: 8px;
}


div.ExecutionVisualizer table.dictTbl,
div.ExecutionVisualizer table.instTbl,
div.ExecutionVisualizer table.classTbl {
  border-spacing: 1px;
}

div.ExecutionVisualizer table.dictTbl td.dictKey,
div.ExecutionVisualizer table.instTbl td.instKey,
div.ExecutionVisualizer table.classTbl td.classKey {
  background-color: #faebbf;
}

div.ExecutionVisualizer table.dictTbl td.dictVal,
div.ExecutionVisualizer table.instTbl td.instVal,
div.ExecutionVisualizer table.classTbl td.classVal,
div.ExecutionVisualizer td.funcCodTd {
  background-color: #ffffc6;
}


div.ExecutionVisualizer table.dictTbl td.dictKey,
div.ExecutionVisualizer table.instTbl td.instKey,
div.ExecutionVisualizer table.classTbl td.classKey {
  padding-top: 6px /*15px*/;
  padding-bottom: 6px;
  padding-left: 10px;
  padding-right: 4px;

  text-align: right;
}

div.ExecutionVisualizer table.dictTbl td.dictVal,
div.ExecutionVisualizer table.instTbl td.instVal,
div.ExecutionVisualizer table.classTbl td.classVal {
  padding-top: 6px; /*15px*/;
  padding-bottom: 6px;
  padding-right: 10px;
  padding-left: 4px;
}

div.ExecutionVisualizer td.funcCodTd {
  padding-left: 4px;
  padding-right: 4px;
}

/* don't just match generic 'td' inside of here ... name the exact classes,
   or else you might risk polluting inner td's such as those for multidimensional array elements */
div.ExecutionVisualizer table.classTbl td.classKey,
div.ExecutionVisualizer table.classTbl td.classVal,
div.ExecutionVisualizer table.instTbl td.instKey,
div.ExecutionVisualizer table.instTbl td.instVal,
div.ExecutionVisualizer td.funcCodTd {
  border-bottom: 1px #888 solid;
}

div.ExecutionVisualizer table.classTbl td.classVal,
div.ExecutionVisualizer table.instTbl td.instVal {
  border-left: 1px #888 solid;
}

div.ExecutionVisualizer table.classTbl,
div.ExecutionVisualizer table.funcTbl {
  border-collapse: collapse;
  border: 1px #888 solid;
}

/* only add a border to dicts if they're embedded within another object */
div.ExecutionVisualizer td.listElt table.dictTbl,
div.ExecutionVisualizer td.tupleElt table.dictTbl,
div.ExecutionVisualizer td.dictVal table.dictTbl,
div.ExecutionVisualizer td.instVal table.dictTbl,
div.ExecutionVisualizer td.classVal table.dictTbl {
  border: 1px #888 solid;
}

div.ExecutionVisualizer .objectIdLabel {
  font-size: 8pt;
  color: #444;
  margin-bottom: 2px;
}

div.ExecutionVisualizer .typeLabel {
  font-size: 8pt;
  color: #555;
  margin-bottom: 2px;
}

div.ExecutionVisualizer div#stack,
div.ExecutionVisualizer div#globals_area {
  padding-left: 10px;
  padding-right: 30px;

  /* no longer necessary ... */
  /*float: left;*/
  /* border-right: 1px dashed #bbbbbb; */
}

div.ExecutionVisualizer div.stackFrame,
div.ExecutionVisualizer div.zombieStackFrame {
  /*background-color: #ffffff;*/ /* don't set a background color to let it blend into background of enclosing page (in case it's non-white) */
  margin-bottom: 15px;
  padding: 2px;
  padding-left: 6px;
  padding-right: 6px;
  padding-bottom: 4px;
  font-size: 10pt;
}

div.ExecutionVisualizer div.zombieStackFrame {
  border-left: 1px dotted #aaa;
  /*color: #c0c0c0;*/
  color: #a0a0a0;
}

div.ExecutionVisualizer div.highlightedStackFrame {
  background-color: #e2ebf6;
  /*background-color: #d7e7fb;*/

  /*background-color: #c0daf8;*/
  /*background-color: #9eeaff #c5dfea;*/
}

div.ExecutionVisualizer div.stackFrame,
div.ExecutionVisualizer div.highlightedStackFrame {
  border-left: 1px solid #a6b3b6;
}


div.ExecutionVisualizer div.stackFrameHeader {
  font-family: Andale mono, monospace;
  font-size: 10pt;
  margin-top: 4px;
  margin-bottom: 3px;
  white-space: nowrap;
}

div.ExecutionVisualizer td.stackFrameVar {
  text-align: right;
  padding-right: 8px;
  padding-top: 3px;
  padding-bottom: 3px;
}

div.ExecutionVisualizer td.stackFrameValue {
  text-align: left;
  border-bottom: 1px solid #aaaaaa;
  border-left: 1px solid #aaaaaa;

  vertical-align: middle;

  padding-top: 4px;
  padding-left: 4px;
  padding-bottom: 4px;
}

div.ExecutionVisualizer .stackFrameVarTable tr {

}

div.ExecutionVisualizer .stackFrameVarTable {
  text-align: right;
  padding-top: 3px;

  /* right-align the table */
  margin-left: auto;
  margin-right: 0px;

  /* hack to counteract possible nasty CSS reset styles from parent divs */
  border-collapse: separate;
  border-spacing: 2px;
}

div.ExecutionVisualizer div#heap {
  float: left;
  /* add some left padding or else if it's too close to the stack then
     arrows won't 'curve' nicely, instead they'll be drawn straight,
     which doesn't look as pleasing */
  padding-left: 34px;
}

div.ExecutionVisualizer .readonlyMemoryFooter {
  color: #e93f34; /* should match brightRed JavaScript variable */
  font-size: 8pt;
  margin-top: 2px;
}

div.ExecutionVisualizer .typePunningFooter {
  font-size: 8pt;
  margin-top: 2px;
}

div.ExecutionVisualizer td.toplevelHeapObject {
  /* needed for d3 to do transitions */
  /*padding-left: 8px;*/ /* commented-out on 2023-09-24 to save horizontal space */
  padding-right: 8px;
  padding-top: 4px;
  padding-bottom: 4px;
  /*
  border: 2px dotted white;
  border-color: white;
  */
}

div.ExecutionVisualizer table.heapRow {
  margin-bottom: 10px;
}

div.ExecutionVisualizer div.heapObject {
  padding-left: 2px; /* leave a TINY amount of room for connector endpoints */
}

div.ExecutionVisualizer div.heapPrimitive {
  padding-left: 4px; /* leave some more room for connector endpoints */
}

div.ExecutionVisualizer div#stackHeader {
  margin-bottom: 15px;
  text-align: right;
}

div.ExecutionVisualizer div#heapHeader {
  /*margin-top: 2px;
  margin-bottom: 13px;*/
  margin-left: 4px; /* to left-align it better with heap objects */
  margin-bottom: 15px;
}

div.ExecutionVisualizer div#stackHeader,
div.ExecutionVisualizer div#heapHeader {
  color: #333333;
  font-size: 10pt;
}

div.ExecutionVisualizer div#langDisplayDiv {
  text-align: center;
  margin-top: 2pt;
  margin-bottom: 3pt;
  font-size: 9pt;
}

div.ExecutionVisualizer #executionSlider {
  /* if you set 'width', then it looks ugly when you dynamically resize */
  margin-top: 15px;
  margin-bottom: 5px;

  /* DON'T center this, since we need breakpoints in executionSliderFooter to be well aligned */
  width: 98%;
}

div.ExecutionVisualizer #executionSliderCaption {
  font-size: 8pt;
  color: #666666;
  margin-top: 15px;
}

div.ExecutionVisualizer #executionSliderFooter {
  margin-top: -7px; /* make it butt up against #executionSlider */
}

div.ExecutionVisualizer #codeFooterDocs,
div.ExecutionVisualizer #printOutputDocs {
  margin-bottom: 3px;
  font-size: 8pt;
  color: #666;
}

div.ExecutionVisualizer #codeFooterDocs {
  margin-top: 5px;
  margin-bottom: 12px;
  width: 95%;
}

/* darken slider handle a bit */
div.ExecutionVisualizer .ui-slider .ui-slider-handle {
  border: 1px solid #999;
}


/* for annotation bubbles */

/* For styling tricks, see: http://css-tricks.com/textarea-tricks/ */
textarea.bubbleInputText {
  border: 1px solid #ccc;
  outline: none;
  overflow: auto; /* to look pretty on IE */

  /* make sure textarea doesn't grow and stretch the enclosing bubble */
  resize: none;
  width: 225px;
  max-width: 225px;
  height: 35px;
  max-height: 35px;
}

div.ExecutionVisualizer .annotationText,
div.ExecutionVisualizer .vizDescriptionText {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 11pt;
  line-height: 1.5em;
}

div.ExecutionVisualizer .vizTitleText {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 16pt;
  margin-bottom: 12pt;
}

div.ExecutionVisualizer div#vizHeader {
  margin-bottom: 10px;
  width: 700px;
  max-width: 700px;
}

/* prev then curr, so curr gets precedence when both apply */
div.ExecutionVisualizer .highlight-prev {
  background-color: #F0F0EA;
}

div.ExecutionVisualizer .highlight-cur {
  background-color: #FFFF66;
}

div.ExecutionVisualizer .highlight-legend {
  padding: 2px;
}

/* resizing sliders from David Pritchard */
.ui-resizable-e {
  background-color: #dddddd;
  width: 1px;
  border: 3px solid white;
}

.ui-resizable-e:hover {
  border-color: #dddddd;
}

div.ExecutionVisualizer a,
div.ExecutionVisualizer a:visited,
div.ExecutionVisualizer a:hover {
  color: #3D58A2;
}

div.ExecutionVisualizer div#rawUserInputDiv {
  padding: 5px;
  width: 95%;
  margin: 5px auto;
  text-align: center;
  border: 1px #e93f34 solid;
}

/* for pyCrazyMode */

/* prev then curr, so curr gets precedence when both apply */
div.ExecutionVisualizer .pycrazy-highlight-prev {
  background-color: #eeeeee; /*#F0F0EA;*/
  /*
  text-decoration: none;
  border-bottom: 1px solid #dddddd;
  */
}

div.ExecutionVisualizer .pycrazy-highlight-cur {
  background-color: #FFFF66;
  /* aligned slightly higher than border-bottom */
  /*
  text-decoration: none;
  border-bottom: 1px solid #e93f34;
  */
}

div.ExecutionVisualizer .pycrazy-highlight-prev-and-cur {
  background-color: #FFFF66;

  text-decoration: none;
  border-bottom: 1px solid #999999;
}


#optTabularView thead.stepTableThead {
  background-color: #bbb;
}

#optTabularView tbody.stepTableTbody {
}

#optTabularView td.stepTableTd {
  padding: 3px 10px;
}

#uiControlsPane {
  font-size: 9pt;
  margin-top: 10px;
}

#creditsPane {
  font-size: 9pt;
  margin-top: 20px;
}


/* BEGIN Java frontend by David Pritchard and Will Gwozdz */

/* stack and queue css by Will Gwozdz */
div.ExecutionVisualizer table.queueTbl,
div.ExecutionVisualizer table.stackTbl {
  background-color: #ffffc6;
}

div.ExecutionVisualizer table.queueTbl,
div.ExecutionVisualizer table.stackTbl {
  border: 0px solid black;
  border-spacing: 0px;
}

div.ExecutionVisualizer table.stackTbl td.stackElt,
div.ExecutionVisualizer table.queueTbl td.queueElt {
  padding-left: 8px;
  padding-right: 8px;
  padding-top: 2px;
  padding-bottom: 3px;
  border-top: 1px solid #555555;
  border-bottom: 1px solid #555555;
  border-left: 1px dashed #555555;
}

div.ExecutionVisualizer table.stackTbl td.stackFElt,
div.ExecutionVisualizer table.queueTbl td.queueFElt {
  background-color: white;
  border-top: 1px solid #555555;
  border-bottom: 1px solid #555555;
}

div.ExecutionVisualizer table.stackTbl td.stackLElt {
  background-color: white;
  border-left: 1px solid #555555;
}

div.ExecutionVisualizer table.queueTbl td.queueLElt {
  background-color: white;
  border-top: 1px solid#555555;
  border-bottom: 1px solid #555555;
  border-left: 1px dashed #555555;
}

/* This ensures a border is drawn around a dict
   if its nested in another object. */
div.ExecutionVisualizer td.stackElt table.dictTbl,
div.ExecutionVisualizer td.stackLElt table.dictTbl,
div.ExecutionVisualizer td.stackFElt table.dictTbl,
div.ExecutionVisualizer td.queueElt table.dictTbl,
div.ExecutionVisualizer td.queueLElt table.dictTbl,
div.ExecutionVisualizer td.queueFElt table.dictTbl {
  border: 1px #888 solid;
}

.symbolic {
  font-size: 18pt;
}

/* END Java frontend by David Pritchard and Will Gwozdz */
</style><style>/* css for the 'Get AI Help' LLM prompt creator feature - associated with ai-help.ts */
.aiHelpSubpane {
  margin-top: 10px;
  margin-bottom: 10px;
}

#aiHelpBtn {
}

/* override Tingle.js library's default css here */
.my-custom-modal .tingle-modal-box {
  width: 80%; /* or any other width you'd like, can also be in pixels like 500px */
  max-width: 90%; /* you might want to adjust max-width too, depending on your design */
}

.tingle-btn {
  font-size: 12pt !important;
  padding: 0.4rem 0.8rem !important;
}

.tingle-modal-box__content {
  padding-top: 25px !important;
  padding-bottom: 0px !important;
}

/* add margin/padding to bottom or else the bottom-of-page google anchor ad may
  cover up modal's footer so users can't see it. ugh hacky but works for now */
.tingle-modal-box__footer {
  margin-bottom: 150px !important;
}

#aiHelpCodeContextMsg {
  font-style: italic;
}
</style><style>.tingle-modal *{box-sizing:border-box}.tingle-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;visibility:hidden;flex-direction:column;align-items:center;overflow:hidden;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.9);opacity:0;cursor:url("data:image/svg+xml,%3Csvg width='19' height='19' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.514.535l-6.42 6.42L2.677.536a1.517 1.517 0 00-2.14 0 1.517 1.517 0 000 2.14l6.42 6.419-6.42 6.419a1.517 1.517 0 000 2.14 1.517 1.517 0 002.14 0l6.419-6.42 6.419 6.42a1.517 1.517 0 002.14 0 1.517 1.517 0 000-2.14l-6.42-6.42 6.42-6.418a1.517 1.517 0 000-2.14 1.516 1.516 0 00-2.14 0z' fill='%23FFF' fill-rule='nonzero'/%3E%3C/svg%3E"),auto}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.tingle-modal{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}}.tingle-modal--confirm .tingle-modal-box{text-align:center}.tingle-modal--noOverlayClose{cursor:default}.tingle-modal--noClose .tingle-modal__close{display:none}.tingle-modal__close{position:fixed;top:2.5rem;right:2.5rem;z-index:1000;padding:0;width:2rem;height:2rem;border:none;background-color:transparent;color:#fff;cursor:pointer}.tingle-modal__close svg *{fill:currentColor}.tingle-modal__closeLabel{display:none}.tingle-modal__close:hover{color:#fff}.tingle-modal-box{position:relative;flex-shrink:0;margin-top:auto;margin-bottom:auto;width:60%;border-radius:4px;background:#fff;opacity:1;cursor:auto;will-change:transform,opacity}.tingle-modal-box__content{padding:3rem 3rem}.tingle-modal-box__footer{padding:1.5rem 2rem;width:auto;border-bottom-right-radius:4px;border-bottom-left-radius:4px;background-color:#f5f5f5;cursor:auto}.tingle-modal-box__footer::after{display:table;clear:both;content:""}.tingle-modal-box__footer--sticky{position:fixed;bottom:-200px;z-index:10001;opacity:1;transition:bottom .3s ease-in-out .3s}.tingle-enabled{position:fixed;right:0;left:0;overflow:hidden}.tingle-modal--visible .tingle-modal-box__footer{bottom:0}.tingle-modal--visible{visibility:visible;opacity:1}.tingle-modal--visible .tingle-modal-box{animation:scale .2s cubic-bezier(.68,-.55,.265,1.55) forwards}.tingle-modal--overflow{overflow-y:scroll;padding-top:8vh}.tingle-btn{display:inline-block;margin:0 .5rem;padding:1rem 2rem;border:none;background-color:grey;box-shadow:none;color:#fff;vertical-align:middle;text-decoration:none;font-size:inherit;font-family:inherit;line-height:normal;cursor:pointer;transition:background-color .4s ease}.tingle-btn--primary{background-color:#3498db}.tingle-btn--danger{background-color:#e74c3c}.tingle-btn--default{background-color:#34495e}.tingle-btn--pull-left{float:left}.tingle-btn--pull-right{float:right}@media (max-width :540px){.tingle-modal{top:0;display:block;padding-top:60px;width:100%}.tingle-modal-box{width:auto;border-radius:0}.tingle-modal-box__content{overflow-y:scroll}.tingle-modal--noClose{top:0}.tingle-modal--noOverlayClose{padding-top:0}.tingle-modal-box__footer .tingle-btn{display:block;float:none;margin-bottom:1rem;width:100%}.tingle-modal__close{top:0;right:0;left:0;display:block;width:100%;height:60px;border:none;background-color:#2c3e50;box-shadow:none;color:#fff}.tingle-modal__closeLabel{display:inline-block;vertical-align:middle;font-size:1.6rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}.tingle-modal__closeIcon{display:inline-block;margin-right:.8rem;width:1.6rem;vertical-align:middle;font-size:0}}@keyframes scale{0%{opacity:0;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}</style>

</head>

<body class="vsc-initialized">

  <div id="vizDiv"><div class="ExecutionVisualizer"><table border="0" class="visualizer"><tbody><tr>                           <td class="vizLayoutTd" id="vizLayoutTdFirst"><div id="codAndNav" style="width: 350px;" class="ui-resizable"><div id="codeDisplayDiv">         <div id="langDisplayDiv">Python 3.6</div>         <div id="pyCodeOutputDiv" style="max-height: 400px;"><table id="pyCodeOutput"><tr><td id="gutterTD" valign="top" rowspan="8"><svg id="leftCodeGutterSVG"><polygon id="prevLineArrow" points="0,3 12,3 12,0 18,5 12,10 12,7 0,7" fill="#c9e6ca"></polygon><polygon id="curLineArrow" points="0,3 12,3 12,0 18,5 12,10 12,7 0,7" fill="#e93f34"></polygon></svg></td><td class="lineNo" id="lineNo1" style="cursor: pointer;">1</td><td class="cod" id="v1__cod1" style="cursor: pointer;">def&nbsp;f(x):</td></tr><tr><td class="lineNo" id="lineNo2">2</td><td class="cod" id="v1__cod2">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x&nbsp;+&nbsp;1</td></tr><tr><td class="lineNo" id="lineNo3">3</td><td class="cod" id="v1__cod3"></td></tr><tr><td class="lineNo" id="lineNo4" style="cursor: pointer;">4</td><td class="cod" id="v1__cod4" style="cursor: pointer;">def&nbsp;g(y):</td></tr><tr><td class="lineNo" id="lineNo5">5</td><td class="cod" id="v1__cod5">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;y&nbsp;-&nbsp;1</td></tr><tr><td class="lineNo" id="lineNo6">6</td><td class="cod" id="v1__cod6"></td></tr><tr><td class="lineNo" id="lineNo7" style="cursor: pointer;">7</td><td class="cod" id="v1__cod7" style="cursor: pointer;">def&nbsp;f(z):</td></tr><tr><td class="lineNo" id="lineNo8">8</td><td class="cod" id="v1__cod8">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x&nbsp;*&nbsp;2</td></tr></table></div>         <div id="editCodeLinkDiv" style="font-size: 9pt;"><a id="editBtn" href="https://pythontutor.com/visualize.html#code=def%20f(x)%3A%0A%20%20%20%20return%20x%20%2B%201%0A%0Adef%20g(y)%3A%0A%20%20%20%20return%20y%20-%201%0A%0Adef%20f(z)%3A%0A%20%20%20%20return%20x%20*%202&amp;py=3" target="_blank">Edit Code &amp; Get AI Help</a>         </div>         <div id="legendDiv"><svg id="prevLegendArrowSVG"><polygon points="0,3 12,3 12,0 18,5 12,10 12,7 0,7" fill="#c9e6ca"></polygon></svg> line that just executed<br><svg id="curLegendArrowSVG"><polygon points="0,3 12,3 12,0 18,5 12,10 12,7 0,7" fill="#e93f34"></polygon></svg> next line to execute<p></p></div>         <div id="codeFooterDocs" style="display: none;"></div>       </div><div id="navControlsDiv">                     <div id="executionSlider" class="ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all" style="font-size: 0.9em;"><span class="ui-slider-handle ui-state-default ui-corner-all" tabindex="0" style="left: 0%; width: 0.8em; height: 1.4em;"></span></div>                     <div id="executionSliderFooter"></div>                     <div id="vcrControls">                       <button id="jmpFirstInstr" ,="" type="button" disabled="disabled" style="display: none;">&lt;&lt; First</button>                       <button id="jmpStepBack" ,="" type="button" disabled="disabled">&lt; Prev</button>                       <button id="jmpStepFwd" ,="" type="button" disabled="disabled">Next &gt;</button>                       <button id="jmpLastInstr" ,="" type="button" disabled="disabled" style="display: none;">Last &gt;&gt;</button>                     </div>                     <div id="curInstr"><button id="initVizButton"><font color="#e93f34">Click to Start Visualization</font></button></div><!-- update #curInstr in setVcrControls() later -->                     <div id="rawUserInputDiv" style="display: none;"><!-- hide rawUserInputDiv initially -->                       <span id="userInputPromptStr"></span>                       <input type="text" id="raw_input_textbox" size="30">                       <button id="raw_input_submit_btn">Submit</button>                     </div>                     <div id="errorOutput" style="display: none;"></div>                     <div id="warningsOutput" style="display: none;"></div>                     <div id="creditsPane" style="margin-top: 12px;">Visualized with <a href="https://pythontutor.com/" target="_blank">pythontutor.com</a></div>                     <div id="uiControlsPane" style="display: none;">                      <a id="customizeVizLink" href="https://pythontutor.com/iframe-embed.html#">Move and hide objects</a>                     </div>                   </div><div class="ui-resizable-handle ui-resizable-e" style="z-index: 90;"></div></div></td>                           <td class="vizLayoutTd" id="vizLayoutTdSecond"><div id="progOutputs" style="display: none;">         <div id="printOutputDocs">Print output (drag lower right corner to resize)</div>
         <div class="ui-wrapper" style="overflow: hidden; position: relative; width: 357.6px; height: 52.6px; top: auto; left: auto; margin: 0px; padding-right: 5.8px; padding-bottom: 16px;"><textarea id="pyStdout" cols="40" rows="5" wrap="off" readonly="" class="ui-resizable" style="width: 351.6px; height: 46.6px; margin: 0px; resize: none; position: static; zoom: 1; display: block;"></textarea><div class="ui-resizable-handle ui-resizable-e" style="z-index: 90;"></div><div class="ui-resizable-handle ui-resizable-s" style="z-index: 90;"></div><div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90;"></div></div>       </div>
      <div id="dataViz">
         <table id="stackHeapTable">
           <tbody><tr>
             <td id="stack_td">
               <div id="globals_area">
                 <div id="stackHeader">Frames</div>
               <div class="stackFrame" id="v1__globals"><div id="v1__globals_header" class="stackFrameHeader">Global frame</div><table class="stackFrameVarTable" id="v1__global_table"></table></div></div>
               <div id="stack"></div>
             </td>
             <td id="heap_td">
               <div id="heap">
                 <div id="heapHeader">Objects</div>
               </div>
             </td>
           </tr>
         </tbody></table>
      </div>
      <div id="selectiveHideStatus"></div>
      <div id="cppDetailPane"></div>
       </td>                         </tr></tbody></table></div></div>
  <div id="frontendErrorOutput"></div>



<div class="tingle-modal tingle-modal--noOverlayClose my-custom-modal transparent-overlay" style="display: none;"><button type="button" class="tingle-modal__close"><span class="tingle-modal__closeIcon"><svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"><path d="M.3 9.7c.2.2.4.3.7.3.3 0 .5-.1.7-.3L5 6.4l3.3 3.3c.2.2.5.3.7.3.2 0 .5-.1.7-.3.4-.4.4-1 0-1.4L6.4 5l3.3-3.3c.4-.4.4-1 0-1.4-.4-.4-1-.4-1.4 0L5 3.6 1.7.3C1.3-.1.7-.1.3.3c-.4.4-.4 1 0 1.4L3.6 5 .3 8.3c-.4.4-.4 1 0 1.4z" fill="#000" fill-rule="nonzero"></path></svg></span><span class="tingle-modal__closeLabel">Close</span></button><div class="tingle-modal-box"><div class="tingle-modal-box__content"><div id="aiHelpPane"> <!-- style="margin-top: 8px; padding: 8px; border: 2px dashed #e93f34" -->

    <div id="aiHelpTurnSelectionStep" class="aiHelpSubpane">
      1) Choose one:
      <select id="aiTurnSelector">
        <option value="firstTurn">I want to start a new AI chat session [default]</option>
        <option value="nonfirstTurn">I am continuing an existing AI chat session</option>
      </select>
    </div>

    <div id="aiHelpRoleSelectionStep" class="aiHelpSubpane">
      2) What should the AI do?
      <select id="aiRoleSelector">
        <option value="roleDirect">Answer my question as directly as possible</option>
        <option value="roleSocratic">Guide me to come up with answers on my own</option>
        <option value="roleCustom">[use custom instruction, saved in your browser]</option>
      </select>

      <textarea style="margin-top: 10px;" id="customAiRoleTextarea" rows="6" cols="78" placeholder="Enter custom AI instruction to be included before your code and question."></textarea>
    </div>

    <div id="aiHelpNoRoleStep" class="aiHelpSubpane">
      2) You are continuing an existing session, so you don't need to tell the AI what to do.
    </div>
   
    <div id="aiHelpCodeContextMsg"></div>

    <div id="aiHelpPersonaQuestionStep" class="aiHelpSubpane">
      3) Write your question below:
      <select id="aiQuestionSelector">
      <!-- populate this dynamically in javascript using the contents of preseededQuestions -->
      </select>

      <br><textarea style="margin-top: 5px;" id="aiQuestionTextarea" rows="6" cols="78" placeholder="Your question here ... use examples above to get started"></textarea>

      <p></p>Tips for good questions:
      <ul style="padding-left: 15px; margin-top: 0px;">
        <li><a target="_blank" href="https://ericlippert.com/2014/03/05/how-to-debug-small-programs/">Be specific</a> and refer to specific parts of your code or error message. Don't be vague.</li>
        <li>Provide enough context with your question, such as the instructions for your assignment.</li>
      </ul>

      <p>
        <span style="color: #e93f34;">Coming soon:</span>
        Soon this tool will send the values of your variables to the AI, but for now you must manually write them into your question. e.g., "x is a list containing [1, 2, 3]"
      </p>
    </div>
  </div></div><div class="tingle-modal-box__footer"><button class="tingle-btn tingle-btn--primary">Ask AI to Help</button><button class="tingle-btn tingle-btn--danger">Cancel</button></div></div></div></body></html>